﻿@using System.Diagnostics;
@using System.Collections;
@using System.Reflection;
@using System.Runtime;
@using System.Runtime.Versioning;
@using NewLife.Common;
@using NewLife.Web;
@{
    Layout = NewLife.Cube.Setting.Current.Layout;

    ViewBag.Title = "服务器信息";

    var asm = Assembly.GetExecutingAssembly();
    var att = asm.GetCustomAttribute<TargetFrameworkAttribute>();
    var ver = att.FrameworkDisplayName ?? att.FrameworkName;
    var req = HttpContext.Current.Request;

    // GC设置
    var gc = "IsServerGC={0},LatencyMode={1}".F(GCSettings.IsServerGC, GCSettings.LatencyMode);
}
<div class="kt-portlet kt-portlet--mobile">
    <div class="kt-portlet__head kt-portlet__head--lg">
        <div class="kt-portlet__head-label">
            <span class="kt-portlet__head-icon">
                <i class="kt-font-brand flaticon2-line-chart"></i>
            </span>
            <h3 class="kt-portlet__head-title">
                服务器信息
            </h3>
        </div>
    </div>
    <div class="kt-portlet__body" style="overflow-x:auto;">
        <table class="table table-bordered table-hover table-striped table-condensed">
            <tbody>
                <tr>
                    <td class="name">
                        应用系统：
                    </td>
                    <td class="value">
                        @HttpRuntime.AppDomainAppVirtualPath&nbsp;
                        @if (this.Has((PermissionFlags)16))
                        {
                            <a href="@Url.Action("Restart")" onclick="return confirm('仅重启ASP.Net应用程序域，而不是操作系统！\n确认重启？')">重启应用系统</a>
                        }
                        &nbsp;&nbsp;&nbsp;&nbsp;@req.GetRawUrl()
                    </td>
                    <td class="name">
                        目录：
                    </td>
                    <td class="value">
                        @HttpRuntime.AppDomainAppPath
                    </td>
                </tr>
                <tr>
                    <td class="name">
                        域名地址：
                    </td>
                    <td class="value">
                        <span title="SERVER_NAME">@Request.ServerVariables["SERVER_NAME"]</span>，
                        <span title="LOCAl_ADDR">@Request.ServerVariables["LOCAl_ADDR"]:@Request.ServerVariables["Server_Port"]</span>
                        &nbsp;<span title="REMOTE_HOST">[@Request.ServerVariables["REMOTE_HOST"]]</span>
                        <a href="@Url.Action("Main/ServerVar")" target="main" title="点击打开服务器变量列表">服务器变量列表</a>
                    </td>
                    <td class="name">
                        计算机用户：
                    </td>
                    <td class="value">
                        @Environment.UserName/@Environment.MachineName
                    </td>
                </tr>
                <tr>
                    <td class="name">
                        应用程序域：
                    </td>
                    <td class="value">
                        @AppDomain.CurrentDomain.FriendlyName
                        <a href="@Url.Action("Main/Assembly")" target="main" title="点击打开进程程序集列表">程序集列表</a>
                    </td>
                    <td class="name">
                        .Net 版本：
                    </td>
                    <td class="value">
                        @Environment.Version &nbsp;@ver
                    </td>
                </tr>
                <tr>
                    <td class="name">
                        操作系统：
                    </td>
                    <td class="value">
                        @Environment.OSVersion
                    </td>
                    <td class="name">
                        Web服务器：
                    </td>
                    <td class="value">
                        @ViewBag.WebServerName
                    </td>
                </tr>
                <tr>
                    <td class="name">
                        处理器：
                    </td>
                    <td class="value">
                        @Environment.ProcessorCount
                        核心，@gc
                    </td>
                    <td class="name">
                        时间：
                    </td>
                    <td class="value" title="这里使用了服务器默认的时间格式！后面是开机时间。">
                        @DateTime.Now，开机@(new TimeSpan(0, 0, 0, 0, Environment.TickCount))
                    </td>
                </tr>
                <tr>
                    @{ var process = Process.GetCurrentProcess();}
                    <td class="name">
                        内存：
                    </td>
                    <td class="value">

                        工作集: @((process.WorkingSet64 / 1024 / 1024).ToString("n0"))M
                        提交: @((process.PrivateMemorySize64 / 1024 / 1024).ToString("n0"))M
                        GC: @((GC.GetTotalMemory(false) / 1024 / 1024).ToString("n0"))M
                        <a href="@Url.Action("Main/ProcessModules")" target="main" title="点击打开进程模块列表">模块列表</a>
                        <a href="@Url.Action("MemoryFree")" title="点击释放进程内存">释放内存</a>
                    </td>
                    <td class="name">
                        进程时间：
                    </td>
                    <td class="value">
                        @process.TotalProcessorTime.TotalSeconds.ToString("N2")秒 启动于 @process.StartTime.ToFullString()
                    </td>
                </tr>
                <tr>
                    <td class="name">
                        Session：
                    </td>
                    <td class="value">
                        @Session.Contents.Count 个，@Session.Timeout 分钟，SessionID：@Session.Contents.SessionID
                        <a href="@Url.Action("Main/Session")" target="main" title="点击打开Session列表">Session列表</a>
                    </td>
                    <td class="name">
                        Cache：
                    </td>
                    <td class="value">
                        @Cache.Count 个，可用：@((Cache.EffectivePrivateBytesLimit / 1024).ToString("n0"))KB
                        <a href="@Url.Action("Main/Cache")" target="main" title="点击打开Cache列表">Cache列表</a>
                    </td>
                </tr>
            </tbody>
        </table>
    </div>
</div>
<div class="kt-portlet kt-portlet--mobile">
    <div class="kt-portlet__head kt-portlet__head--lg">
        <div class="kt-portlet__head-label">
            <span class="kt-portlet__head-icon">
                <i class="kt-font-brand flaticon2-line-chart"></i>
            </span>
            <h3 class="kt-portlet__head-title">
                程序集信息
            </h3>
        </div>
    </div>
    <div class="kt-portlet__body" style="overflow-x:auto;">
        <table class="table table-bordered table-hover table-striped table-condensed">
            <thead>
                <tr>
                    <th>名称</th>
                    <th>标题</th>
                    <th>文件版本</th>
                    <th>内部版本</th>
                    <th>编译时间</th>
                    <th>描述</th>
                </tr>
            </thead>
            <tbody>
                @foreach (AssemblyX item in ViewBag.MyAsms)
                {
                    <tr>
                        <td>@item.Name</td>
                        <td>@item.Title</td>
                        <td>@item.FileVersion</td>
                        <td>@item.Version</td>
                        <td>@item.Compile.ToFullString()</td>
                        <td>@item.Description</td>
                    </tr>
                }
            </tbody>
        </table>
    </div>
</div>